查看原文
其他

Machine Learning-模型调优备忘录

阿Sam Python爱好者社区 2019-04-07

作者:阿Sam
个人公众号:SAMshare


前文传送门:

Machine Learning-算法汇总介绍


之前讲了一些机器学习的算法和特征工程的东西,相信大家如果有一些数据也是可以建立出自己的模型了,但是,模型的效果却没有想象中那么好,那么,应该怎么做呢?


这里有一份关于模型调优的备忘录,每当出现上述问题的时候或者是建模前,都可以按照这个清单来进行检查,话不多说,大家一起来看看呗~


(原文来自Jason Brownlee 的文章《Machine Learning Performance Improvement Cheat Sheet》)


为了文章阅读的清晰,先在前面简单说明一下文章的目录框架。


本文存在的意义在于辅助大家提升机器学习模型的效果,方法有很多,如果你在其中的一个办法中找到了突破,仍可以回头再找其他,直到满足你的模型效果要求,本备忘录主要从4个角度来进行方法的阐述,分别是:


  • Improve Performance With Data.(数据)

  • Improve Performance With Algorithms.(算法选择)

  • Improve Performance With Algorithm Tuning.(算法调优)

  • Improve Performance With Ensembles.(效果集成)


好的,下面就分别从这4个角度来说一下。

1. Improve Performance With Data

事实上,你直接改变训练数据或者改变目标的定义,好效果会来得更加“不费吹灰之力”,有的时候还可能是最好的操作,所以有一句话说得很有道理:选择比努力重要哈哈哈

鸡汤不多说,说下Strategy: 创建不同的目标样本并且尽量使用最底层的特征来训练模型算法。

具体策略:

  • 获得更多的数据:一个好的深度学习模型需要更多的数据来训练,其他非线性的机器学习模型也是如此。

  • 开发更多变量:如果你实在不能获得更多的数据亦或是更好质量的数据,也许可以通过概率模型、统计模型来生成新的变量。

  • 清洗数据:通过数据清洗,你可以对缺失值、异常值进行合理的填补与修复,从而提升数据整体的质量。

  • 重新采样数据:其实可以通过对数据的重新采样来改变数据的分布和大小。对某一特定类型的样本进行采样,说不定可以更好滴表现出效果。又或者是使用更小的数据,从而加快速度。

  • 问题解决思路的重新思考:有的时候,你可以把你目前正在“焦头烂耳”想要解决的“预测性”问题,换成回归、分类、时间序列、异常检测、排序、推荐等等的问题。

  • 调整变量再入模:这里指的是对数据进行离散化、标准化等的操作。

  • 改变现有的变量:这里相信大家也很常见,就是对变量进行对数转换或指数转换,让其特性能更好地表现。

  • 对变量进行降维:有的时候降维后的变量有更好的表现哦。

  • 特征选择:这个就是特征工程了,简单来说,就是你对特征(变量)进行重要性的排序,选择相对预测力强的特征进入模型。


2. Improve Performance With Algorithms

机器学习其实都是关于算法的学习。

Strategy: 识别出优于平均值的算法,但要对其实验过程以及结果抱着怀疑态度,并反复思考。

具体策略:

  • 重采样方法:使用什么方法来估计效果?有个原则就是要充分利用可用的数据来验证,这里,k-fold交叉验证方法可以是最好的哦。

  • 评价指标:不同的目标需要使用不同的评价指标,这个相信大家在学习混淆矩阵的时候应该有所了解,什么pv+,命中率等等,都是对于特定类型的目标有着非常有效的识别。如果是一个排序性的问题,而你却用了准确度的指标来衡量模型的好坏似乎也说不过去把?

  • 关注线性算法:线性算法通常会不那么好用,但是却更好地被人类理解且可以快速测试,如果你发现某个线性算法表现地还行,请继续优化它。

  • 关注非线性算法:非线性算法往往会需要更多的数据,通过更加复杂的计算来获得一个不错的效果。

  • 从文献中找ideas:这个方法还经常做,从文献中可以了解到更多的经典算法在特定需要下的应用,通过对文献的阅读来扩充你的“解题”思路把。


3. Improve Performance With Algorithm Tuning

模型调参也是一个非常费时间的环节,有的时候“好运”可以马上抽查出表现还不错的结果,并持续调参,就可以得到一个不错的结果。但如果要对其他所有的算法进行优化,那么需要的时间就可能是几天、几个星期或者几个月了。

Strategy: 充分利用性能良好的机器学习算法。

具体策略:

  • 诊断方法:不同的算法需要提供不同的可视化和诊断的方法。

  • 调参的直觉:这个就很“玄学”了,但其实都是一些经验,当你调的参足够多,也可以大致可以对这些不同算法的参数有了自己的理解,自然就有了这些所谓的“直觉”。

  • 随机搜索:在N维参数空间按某种分布(如正态分布)随机取值,因为参数空间的各个维度的重要性是不等的,随机搜索方法可以在不重要的维度上取巧。

  • 网格搜索:先固定一个超参,然后对其他各个超参依次进行穷举搜索。

  • 从文献中找ideas:从文献中了解这个算法用到了哪些算法,并且这些算法主要的取值值域,有益于自身工作的开展哦。

  • 从知名网站中找ideas:国内我个人觉得知乎还是蛮可以的,关于这节的参数调参,也是有好多好文章,其外还有csdn也不错。


4. Improve Performance With Ensembles

这个算法集成的方法也是非常常用的,你可以结合多个模型的结果,综合输出一个更加稳定且效果不错的结果。

Strategy: 结合各种模型的预测结果并输出。

具体策略:

  • 混合模型的预测值:你可以把多个模型的预测结果结合起来,你可以将多个训练效果还不错的模型的预测结合综合起来,输出一个“平均”结果。

  • 混合不同数据的预测值:你也可以把不同的数据集训练出来模型的结果进行结合,作为一个输出。(这个与上面的区别在于数据集的特征不同)

  • 混合数据样本:很拗口,其实意思就是将数据集拆分成不同的子数据集,用于训练同一个算法,最后输出综合的预测结果。这个也被称之为bootstrap aggregation 或 bagging。

  • 使用模型的方法集成:你也可以使用一个新的模型来学习如何结合多个性能不错的模型结果,输出一个最优的结合。这被称之为堆叠泛化或叠加,通常在子模型有技巧时很有效,但在不同的方式下,聚合器模型是预测的一个简单的线性加权。这个过程可以重复多层深度。


5. 参考资料

1.机器学习各种算法怎么调参?   https://www.zhihu.com/question/34470160?sort=created

2.《machine-learning-performance-improvement-cheat-sheet》   https://machinelearningmastery.com/machine-learning-performance-improvement-cheat-sheet/

Python爱好者社区历史文章大合集

Python爱好者社区历史文章列表(每周append更新一次)

福利:文末扫码立刻关注公众号,“Python爱好者社区”,开始学习Python课程:

关注后在公众号内回复“课程”即可获取:

小编的Python入门视频课程!!!

崔老师爬虫实战案例免费学习视频。

丘老师数据科学入门指导免费学习视频。

陈老师数据分析报告制作免费学习视频。

玩转大数据分析!Spark2.X+Python 精华实战课程免费学习视频。

丘老师Python网络爬虫实战免费学习视频。


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存